home *** CD-ROM | disk | FTP | other *** search
- { accpopup.pas -- Add accelerators to floating popup menus }
-
- program AccPopup;
-
- {$R accpopup.res}
-
- uses WinTypes, WinProcs, WObjects;
-
- const
-
- id_Menu = 100; { Menu resource ID }
- id_Accs = 200; { Accelerator resource ID }
- cm_CtrlT = 101; { Command ID for Ctrl+T }
- cm_CtrlP = 102; { Command ID for Ctrl+P }
- cm_CtrlW = 103; { Command ID for Ctrl+W }
- cm_Quit = 104; { Command ID for Alt+X }
-
- type
-
- AccPopupApplication = object(TApplication)
- procedure InitInstance; virtual;
- procedure InitMainWindow; virtual;
- end;
-
- PAccPopupWindow = ^AccPopupWindow;
- AccPopupWindow = object(TWindow)
- procedure Message(P: PChar);
- procedure WMCommand(var Msg: TMessage);
- virtual wm_First + wm_Command;
- procedure WMRButtonDown(var Msg: TMessage);
- virtual wm_First + wm_RButtonDown;
- end;
-
-
- { AccPopupApplication }
-
- {- Initialize this instance of the application }
- procedure AccPopupApplication.InitInstance;
- begin
- TApplication.InitInstance;
- HAccTable := LoadAccelerators(HInstance, PChar(id_Accs))
- end;
-
- {- Initialize AccPopupApplication object's window }
- procedure AccPopupApplication.InitMainWindow;
- begin
- MainWindow := New(PAccPopupWindow,
- Init(nil, 'Click right mouse button for menu'))
- end;
-
-
- { AccPopupWindow }
-
- {- Display a message in a message-box window }
- procedure AccPopupWindow.Message(P: PChar);
- begin
- MessageBox(HWindow, P, 'You selected...', mb_Ok)
- end;
-
- {- Intercept all wm_SysCommand messages }
- procedure AccPopupWindow.WMCommand(var Msg: TMessage);
- begin
- case Msg.WParam of
- cm_CtrlT: Message('First Command -- Ctrl+T');
- cm_CtrlP: Message('Second Command -- Ctrl+P');
- cm_CtrlW: Message('Third Command -- Ctrl+W');
- cm_Quit: CloseWindow;
- else
- TWindow.WMCommand(Msg)
- end
- end;
-
- {- Create, display, use, and destroy the floating popup menu }
- procedure AccPopupWindow.WMRButtonDown(var Msg: TMessage);
- var
- P: TPoint;
- MenuH, PopupMenuH: HMenu;
- begin
- P.X := Msg.LParamLo;
- P.Y := Msg.LParamHi;
- ClientToScreen(HWindow, P);
- MenuH := LoadMenu(HInstance, PChar(id_Menu));
- if MenuH <> 0 then
- begin
- PopupMenuH := GetSubMenu(MenuH, 0);
- TrackPopupMenu(PopupMenuH, 0, P.X, P.Y, 0, HWindow, nil);
- DestroyMenu(MenuH)
- end
- end;
-
- var
-
- AccPopupApp: AccPopupApplication;
-
- begin
- AccPopupApp.Init('AccPopupApp');
- AccPopupApp.Run;
- AccPopupApp.Done
- end.
-
-
- {--------------------------------------------------------------
- Copyright (c) 1991 by Tom Swan. All rights reserved.
- Revision 1.00 Date: 2/22/1991
- ---------------------------------------------------------------}
-